// src/ComponentInjector.js
export default class ComponentInjector {
  constructor(target) {
    this.target = target; // 接收主类 TestUI
  }

  /**
   * 核心方法：注册组件为「分类的下属函数」
   * @param {string} category 分类名称（如 'form'，作为主类的属性）
   * @param {string} subMethodName 下属函数名（如 'myButton'，作为分类的下属函数）
   * @param {Object} component 组件定义（.vue 文件）
   * @param {Object} defaultOptions 组件默认配置
   */
  registerAsSubMethod(category, subMethodName, component, defaultOptions = {}) {
    // 1. 确保主类下存在该分类（不存在则自动创建分类对象）
    if (!this.target[category]) {
      this.target[category] = {}; // 如：TestUI.form = {}
    }

    // 2. 将组件方法挂载为「分类的下属函数」
    this.target[category][subMethodName] = (registerOptions = {}) => {
      // 合并默认配置和注册时的自定义配置
      const mergedConfig = { ...defaultOptions, ...registerOptions };
      // 返回带配置的组件（供 Vue 注册使用）
      return {
        ...component,
        props: {
          ...component.props,
          default: () => mergedConfig
        }
      };
    };
  }

  // 可选：保留原 register 方法，兼容之前的调用习惯（本质和 registerAsSubMethod 一致）
  register = this.registerAsSubMethod;
}